Ingeniería del Diseño

Conceptos de diseño para diseñar un software: - diseño de datos, diseño arquitectónico, interfaz, procedimental.

Requisitos => Validación => Diseño

La finalidad del diseño del software es aplicar un conjunto de

- Principios

- Conceptos

- Prácticas

Que conducen al desarrollo de un sistema o producto de calidad.

La meta del diseño es:

- Entender el contexto donde mi software va a estar funcionando. Las condiciones de la industria, como la ley, y la normal operatoria de la empresa.

- Crear un modelo de software que incluya todos los requisitos del cliente.

- Que complazca a quien lo use.

- Buscar la solución que mejor cumpla las necesidades.

¿Quién lo hace?

  • Se hace adentro
  • El cliente no debería participar de la Actividad Técnica, Ya se tienen los requisitos
  • Si el cliente tiene que participar es porque:

  • El programador no debería participar
  • ¿Por qué es importante?

  • Le da la inteligencia al software.
  • Calidad
  • Sirve como fundamento para todas las actividades consecuentes.
  • Resultado => De. Papel o magnético entregable (plano, cursograma, etc.)

    Debería servirle al cliente para que lo programe cualquier otro.

    Además debe servir como guía legible para los programadores.

    ¿Qué hay que diseñar?

  • Crear un modelo del software que proporciona detalles acerca de:
    1. ESTRUCTURA DE DATOS: características de cada uno y sus relaciones.
    2. Hacer un DISEÑO PROCEDIMENTAL o de COMPONENTES: descripción de lo que va a hacer el software.
    3. DISEÑO ARQUITECTÓNICO: estructura y relaciones.
    4. INTERFAZ: como se va a mostrar.
    5. Cómo se comunica el software con el usuario, otro software, o el hardware.

    Objetivos

    Atributos de calidad

    El peso del atributo depende del tipo de software.

    CONCEPTOS FUNDAMENTALES PARA HACER UN BUEN DISEÑO

  • Abstracción: Comenzar con un alto nivel para comprender el problema e ir bajando. De lo general a lo particular (mediante iteraciones)
  • Patrones: describe un problema que ocurre una y otra vez en nuestro entorno, y después describe la solución a dicho problema, de tal forma que esta solución se pueda utilizar muchas veces, sin nunca hacerlo de la misma forma dos veces.
  • Ventajas, porque modularizar:

    1. Más fácil de desarrollar.
    2. A la larga es más fácil de encontrar un problema.
    3. Reutilización: un módulo sirve para aplicarse más de una vez.
    4. Es más fácil ajustar cambios sin introducir nuevos errores.
    5. Más fácil de probar.
    6. Puedo construir más de un módulo a la vez.
    7. Más fácil la eliminación de errores.

    Desventajas:

    1. Con las relaciones (más interfaces): cuando pongo un nuevo módulo, hacer que se relacione con los demás módulos.
    2. Es más complejo, por lo que cuesta más la integración de los módulos.
    3. Puede que en algún caso sea menos performante.

    El esfuerzo para desarrollar un solo modelo de software decrece conforme se incrementa el número de módulos.

    Pero a medida de que crece el número de módulos, el esfuerzo asociado con la integración de los mismos también crece.

    Por eso hay que tratar de encontrar el equilibrio.

  • Ocultamiento de la información:
  • (Variables, parámetros) Ocultar la información que no sea necesaria para otros módulos, facilita el mantenimiento y las modificaciones.

    Hay una menor probabilidad de introducir errores inadvertidos cuando realizas una modificación.

  • Independencia funcional:
  • Se desea diseñar el software de tal manera que cada módulo aborde una subfunción específica de los requisitos y tenga una sola interfaz cuando se observe desde otras partes de la estructura del programa. La independencia hace referencia a dos criterios cualitativos:

  • Refinamiento:
  • Hace que el diseñador trabaje sobre el enunciado original y que proporcione más y más detalle, además revela los detalles de grado menor mientras se realiza el diseño.

  • Fabricación:
  • Reorganización que simplifica el diseño sin cambiar su comportamiento. Se buscan redundancias, elementos inútiles e innecesarios, que son consideradas fallas.

    =>software + fácil de integrar, probar y mantener.

    ¿Cuáles son las reglas que deben seguirse para la construcción de la interfaz de usuario?

    En su libro sobre diseño de interfaces, Theo Mandel acuñó tres reglas de oro:

    1. Dar el control al usuario:
      • Evitar que el usuario realice tareas innecesarias o indeseadas.
      • Proporcionar una interfaz flexible. Si al usuario le gusta más trabajar con teclado, que el software sea adaptable a las necesidades del usuario.
      • Que el usuario pueda interrumpir y deshacer acciones que realizó.
      • Que el usuario pueda personalizar lo que ve, poniéndole el color que más le guste, por ejemplo.
      • Ocultar elementos técnicos.
      • Que el usuario sienta que puede manipular los objetos, así como lo hace en la vida real. (que pueda estirar una ventana)
    2. Reducir la carga de memoria del usuario:

    Cuantas más cosas tenga que recordar el usuario, más probabilidad de que cometa errores cuando interactúa con el sistema.

  • Reducir la demanda de memoria a corto plazo, introduciendo pistas visuales.
  • Definir valores por defecto, que tengan sentido para un usuario promedio. Pero que también se le dé la posibilidad de especificar sus preferencias. Debe también que poderse reestablecer los valores por defecto.
  • Definir accesos directos intuitivos como Ctrl+P para imprimir.
  • El formato de la interfaz debe basarse en la realidad. (ej., cheque con sus respectivos campos).
  • Hacer que la información se desglosa a medida que el usuario incurra sobre ella.
  • Lograr que la interfaz sea consistente:
  • La interfaz debe adquirir y presentar la información de manera consistente. Esto se logra basándose en un estándar.

  • Proporcionar indicadores que le den una idea al usuario del contexto en el cual se encuentra trabajando.
  • Mantener las características del diseño entre las distintas aplicaciones de una misma “familia”.
  • Tratar de conservar las características de diseño que previamente fueron aceptadas y adoptadas como un estándar (por ejemplo F1 para la ayuda).